'use strict';
// 通过 require 引入 vk 实例
const vk = require('vk-unicloud');
// const JSONBigNumber = require("json-bignumber")
// 通过 vk.init 初始化 vk实例（只有初始化后才能使用）
vk.init({
	baseDir: __dirname,
	requireFn: require
});
module.exports = {
	/**
	 * XXXnameXXX
	 * @url admin/pages/files_mzgl/dy_tv/kh/updataVideo 前端调用的url参数地址
	 * data 请求参数
	 * @param {String} params1  参数1
	 */
	main: async (event) => {
		let {
			data = {}, userInfo, util, filterResponse, originalParam
		} = event;
		let {
			customUtil,
			uniID,
			config,
			pubFun,
			vk,
			db,
			_
		} = util;
		let {
			uid,
			_id,
			ma_app_id,
			album_id,
			album_info,
			djbj
		} = data;
		let res = {
			code: 0,
			msg: ""
		};
		// 业务逻辑开始-----------------------------------------------------------

		let A = await vk.baseDao.selects({
			dbName: "a_appid",
			// 主表where条件
			whereJson: {
				appid: ma_app_id
			},
		});

		console.log("A========", A);


		let appsecret = A.rows[0].appsecret

		let TvArr = await vk.baseDao.select({
			dbName: "dy_tv_series", // 表名
			getCount: false, // 是否需要同时查询满足条件的记录总数量，默认false
			getMain: true, // 是否只返回rows数据，默认false
			pageIndex: 1, // 当前第几页
			pageSize: -1, // 每页条数
			whereJson: { // 条件
				tv_id: _id // 金额大于0
			},
			// 按_id降序 asc 升序 desc 降序 
			sortArr: [{
				name: "_id",
				type: "desc"
			}],
		});

		let TvSeries = await vk.baseDao.select({
			dbName: "dy_tv_series", // 表名
			getCount: true, // 是否需要同时查询满足条件的记录总数量，默认false
			getMain: false, // 是否只返回rows数据，默认false
			pageIndex: 1, // 当前第几页
			pageSize: -1, // 每页条数
			whereJson: { // 条件
				tv_id: _id // 金额大于0
			},
			// 代表只显示_id和money字段
			fieldJson: {
				_id: false,
				title: true,
				seq: true,
				cover_list: true,
				open_video_id: true,
			},
			// 按_id降序 asc 升序 desc 降序 
			sortArr: [{
				name: "_id",
				type: "desc"
			}],
		});
		let TVdata = TvSeries.rows

		//获取accessToken
		let urlA = "https://open.douyin.com/oauth/client_token/"
		const accessToken = await uniCloud.httpclient.request(urlA, {
			method: 'POST',
			headers: {
				"Content-Type": "application/json",
			},
			data: {
				client_key: ma_app_id, // id
				client_secret: appsecret, // 密钥
				grant_type: "client_credential",
			},
			dataType: 'json', // 指定返回值为json格式，自动进行parseK
		})


		// 有效时间为 2 个小时
		let access_token = accessToken.data.data.access_token

		if (djbj) {
			console.log("1111111111111111111111111111111111111111111");
			let versiondata = await vk.baseDao.select({
				dbName: "dy_tv", // 表名
				getCount: false, // 是否需要同时查询满足条件的记录总数量，默认false
				getMain: true, // 是否只返回rows数据，默认false
				pageIndex: 1, // 当前第几页
				pageSize: -1, // 每页条数
				whereJson: { // 条件
					_id: _id // 金额大于0
				},
			});
			console.log("versiondata", versiondata);
			let version = versiondata[0].version || 1
			// 短剧送审
			let urlS = "https://open.douyin.com/api/playlet/v2/video/review/"
			let newinfoA = await uniCloud.httpclient.request(urlS, {
				method: 'POST',
				headers: {
					"Content-Type": "application/json",
					"access-token": access_token,
				},
				data: {
					ma_app_id: ma_app_id,
					album_id: album_id,
					version: version
				},
				dataType: 'json', // 指定返回值为json格式，自动进行parseK
			})
			console.log("newinfoA====", newinfoA);
			if (newinfoA.data.err_msg) {
				return {
					code: 1,
					msg: newinfoA.data.err_msg
				};
			}
			let num = await vk.baseDao.update({
				dbName: "dy_tv", // 表名
				whereJson: { // 条件
					album_id: album_id,
				},
				dataJson: { // 需要修改的数据
					audit_status: 2,
					version: version
				}
			});

			console.log("num============", num);
			return {
				code: 1,
				msg: "当前送审版本" + version
			};
		}
		//编辑短剧
		async function getMediaList(episode_info_list) {
			// 上传短剧信息至内容库
			let urlT = "https://open.douyin.com/api/playlet/v2/video/edit/"
			return await uniCloud.httpclient.request(urlT, {
				method: 'POST',
				headers: {
					"Content-Type": "application/json",
					"access-token": access_token,
				},
				data: {
					album_id: album_id,
					ma_app_id: ma_app_id,
					album_info: album_info,
					episode_info_list: episode_info_list
				},
				dataType: 'text', // 指定返回值为json格式，自动进行parseK
			})
		}

		//匹配seq
		function findObjectByName(arr, seq) {
			var foundObject = arr.find((obj) => obj.seq === seq);
			return foundObject;
		}




		//编辑短剧
		let episode_id_map = []
		for (let i = 0; i < TVdata.length; i += 100) {
			console.log("TVdata====", TVdata);
			const episode_info_list = TVdata.slice(i, i + 100); // 每次最多取100条数据
			let tmp = await getMediaList(episode_info_list) //提交100集
			let jsonStr = tmp.data
			console.log("jsonStr====", jsonStr);


			const str = JSON.parse(jsonStr).err_msg;

			console.log("str========", str);

			// if (str.includes("open_video_id参数不合法")) {
			// 	// 短剧送审
			// 	let urlB = "https://open.douyin.com/api/playlet/v2/video/review/"
			// 	let newinfoB = await uniCloud.httpclient.request(urlB, {
			// 		method: 'POST',
			// 		headers: {
			// 			"Content-Type": "application/json",
			// 			"access-token": access_token,
			// 		},
			// 		data: {
			// 			ma_app_id: ma_app_id,
			// 			album_id: album_id,
			// 		},
			// 		dataType: 'json', // 指定返回值为json格式，自动进行parseK
			// 	})
			// 	console.log("newinfoB====", newinfoB);

			// 	let num = await vk.baseDao.update({
			// 		dbName: "dy_tv", // 表名
			// 		whereJson: { // 条件
			// 			album_id: album_id,
			// 		},
			// 		dataJson: { // 需要修改的数据
			// 			audit_status: 2
			// 		}
			// 	});

			// 	return res
			// }



			if (str) {
				return {
					code: 1,
					msg: str
				}
				console.log("短剧送审报错存入数据库");
				let num = await vk.baseDao.add({
					dbName: "dy_error", // 表名
					dataJson: { // 需要修改的数据
						err_msg: str,
						_add_time_str: vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss"),
					}
				});
			}


			//把获取的episode_id_map转为数组

			// 使用正则表达式匹配 episode_id_map 对象中的内容
			const regexx = /"episode_id_map":\s*({[^}]+})/;
			const matchx = jsonStr.match(regexx);
			console.log("matchx====", matchx);

			const episodeIdMapStr = matchx[1]; // 匹配到的 episode_id_map 字符串

			const formattedData = [];

			// 使用正则表达式来匹配键值对，使用 \g 标志以多次匹配
			const regex = /"(\d+)":(\d+)(,||")/g;
			let match;

			// 添加一个额外的循环以多执行一次


			while ((match = regex.exec(episodeIdMapStr)) !== null || regex.lastIndex > 0) {
				if (match) {
					const seq = parseInt(match[1], 10);
					const episode_id = String(match[2]);
					formattedData.push({
						seq,
						episode_id
					});
				}
			}

			console.log(formattedData);



			// 合并数组
			episode_id_map = episode_id_map.concat(formattedData)


		}

		if (episode_id_map) {
			//匹配修改episode_id
			let new_tv_data = TvArr.map((item, index) => {
				let result = {};
				result = findObjectByName(episode_id_map, item.seq);
				console.log("result================104：" + result);
				if (result) {
					//匹配成功，进行替换
					console.log("result.episode_id" + result.episode_id);
					item.episode_id = result.episode_id;
				} else {
					console.log("================90" + result);
					console.log(`第${item.seq}集匹配失败`);
				}
				return item;
			});

			//匹配完之后触发批量函数更新分集
			if (new_tv_data) {
				for (var i = 0; i < new_tv_data.length; i++) {
					res.newInfo = await vk.baseDao.updateById({
						dbName: "dy_tv_series",
						id: new_tv_data[i]._id,
						dataJson: {
							episode_id: new_tv_data[i].episode_id
						},
					});
				}
			}
		}


		// 业务逻辑结束-----------------------------------------------------------
		return res;
	}
}